#ifndef XMLNode_h__
#define XMLNode_h__

#include <map>

class XMLNode
{
public:
	XMLNode();
	virtual ~XMLNode();

	void SetParent(XMLNode* node);
	XMLNode* AddChild(XMLNode* node);

	void SetStartElement(const tstring& elem);
	void AddValue(const pair<tstring, tstring>& values);
	void SetText(const tstring& text);

	const tstring& GetStartElem() const;
	const tstring& GetText() const;
	const tstring& GetValue(const tstring& key) const;

	const XMLNode* GetNextChild() const;
	const XMLNode* GetParent() const;

private:
	tstring m_StartElem;
	map<tstring, tstring> m_Values;
	tstring m_Text;
	vector<XMLNode*> m_Children;
	mutable int m_Pos;
	XMLNode* m_Parent;

	XMLNode(const XMLNode &t);
	XMLNode& operator= (const XMLNode &t);
};
#endif // XMLNode_h__